системне програмування
Практична робота № 3
Машинні коди. Байт Способу Адресації.
В загальному, формат машинної команди можна представити наступним чином:
Префікс
Перепризначення сегменту
Код Операції
Байт способу адресації
Адреса
Дані
0/1
0/1
Завжди присутній
1
0/1
0,1,2
0,1,2
Позначення 0/1 означає відсутність/присутність даного поля в машинному коді або і його розмір в байтах.
Існують команди розмірності 1,2,3,4 байти.
Поле “Префікс” – для команд повтору рядкових операцій
REP/REPE/REPZ/REPNZ – повторює рядкову операцію визначену кількість разів безумовно, або по стану прапорця. Використовуються в якості префікса перед рядковими командами типу CMPS(порівняння рядків), MOVS(переміщення рядів). Наприклад:
MOV CX,20
Встановлення лічильника на 20 байт
LEA DI, STRING2
Адреса “куди” пересилати (відносно значення в регістрі ES)
LEA SI, STRING1
Адреса “звідки” пересилати (відносно значення в регістрі DS)
REP MOVSB
Переслати дані (породжений машинний код: CS:0101 F3
CS:0102 A4)
Значення в лічильнику команд не змінюється поки в CX не буде 0, а декремент відбувається автоматично.
Поле “Перепризначення сегменту” – присутній в командах, що використовують додаткове перевизначення сегментних регістрів.
Поле “Код Операції” (далі - КО) визначає яка саме дія буде виконуватися (+/-/MOV...)
Поле “Байт способу адресації” (БСА) :
Відсутній у таких випадках:
команда не має операндів;
один операнд регістр другий - безпосередні дані;
один операнд – адреса пам’яті, другий – регістр AX або AL (для акумулятора є спрощені команди, тому адресація інша);
в командах переходів (JMP);
в командах прямого вводу-виводу (IN-OUT).
Присутній, коли є непряма, пряма адресація.
Способи адресації
Розрізняють такі види адресації:
Регістрова – всі операнди знаходяться в регістрах процесора;
Безпосередня – один з операндів є безпосередньо числом(даними);
Пряма – в одному з операндів команди вказується ім’я певної змінної (мітка), адреса в регістрі;
Непряма:
Базова
Індексна
Базово-індексна
Команди з прямою адресацією пам’яті працюють швидше, оскільки не потребують додаткового додавання при визначенні фізичної адреси
При непрямій адресації посилання на операнд визначається через базовий або індексний регістр, константи, змінні зміщення та прості змінні. Квадратні дужки, що визначають операнди при такій адресації діють як знак плюс.
Схема формування адреси при непрямій адресації:
Ці операнди можна комбінувати в довільній послідовності. Але не можна одночасно використовувати два базові регістри або два індексні регістри. Відповідно, можна побудувати 16 різних записів адресації.
При формуванні фізичної адреси базовий регістр BX у виді [BX] використовується разом з сегментним регістром DS, а базовий регістр BP у виді [BP] використовується разом з сегментним регістром SS. Індексні регістри SI та DI передбачають використання сегментного регістру DS.
Приклади адресації
{припустимо маємо наступні визначення для сегментів і даних}
DOSSEG
.MODEL SMALL
.STACK 100h
.DATA
HeM DB 'Hello, world',13,10,'$'
.CODE
mov ax,@data
mov ds,ax
mov ah,9
mov dx,OFFSET HeM
int 21h
Команда
Спосіб адресації
Результат
Машинний код
mov ds,ax
Регістрова
ds=5254
8ED8
mov si,7
mov di,11d
mov bp,0
mov bx,0
Безпосередня
si=0007
di=000B
bp=0000
bx=00000
BE0700
BE0B00
BD0000
DD0000
mov al,HeM
mov al,[HeM]
mov al,HeM+7
Пряма
al=48
al=48
al=77
A00000
A00000
A00700
mov al,[bp]
mov al,[bx]
Базова
al=64
al=48
8A4600
8A07
mov al,HeM[si]
mov al,[HeM+si]
mov al,[HeM][si]
mov al,[HeM].si
mov al,HeM.[si]
mov al,HeM.si
Індексна
al=77
8A840000
mov al,[bp][di]
mov al,[bx][si]
mov al,[bx+di+7]
mov al,[bp][si+HeM].7
Базово-індексна
al=00
al=6C
al=0A
al=00
8A03
8A00
8A4107
8A820007
mov ah,4ch
int 21h
END
Повертаючись до БСА, і враховуючи наведені способи адресації, зупинимось детальніше на форматі цього поля. Зверн...